import { check } from './lib/bot.js';
// ESModule | TypeScript
import { createOpenAPI, createWebsocket } from 'qq-guild-bot';
import solve from './lib/dealMsg.js';
import setLog from './lib/config/log.js';
//检查配置文件
await check();

setLog();

const testConfig = {
  appID: cfg.account.appID, // 申请机器人时获取到的机器人 BotAppID
  token: cfg.account.token, // 申请机器人时获取到的机器人 BotToken
  intents: cfg.account.intents, // 事件订阅,用于开启可接收的消息类型
  sandbox: cfg.account.sandbox // 沙箱支持，可选，默认false. v2.7.0+
};

// 创建 client
export const client = createOpenAPI(testConfig);
global.client = client;

// 创建 websocket 连接
const ws = createWebsocket(testConfig);

// 消息监听
ws.on('READY', wsdata => {
  console.log('机器人信息 :', wsdata.msg.user);
  // 保存机器人信息
  global.bot = wsdata.msg.user;

  solve.init(); // 加载插件
  logger.info(
    logger.green(
      `[登录] :机器人[${wsdata.msg.user.username}]已经准备就绪，可以开始使用`
    )
  );
});
ws.on('ERROR', data => {
  console.log('[ERROR] 事件接收 :', data);
});
ws.on('GUILDS', data => {
  console.log('[GUILDS] 事件接收 :', data);
});
// 有人加入频道或退出频道
ws.on('GUILD_MEMBERS', data => {
  if (data.eventType === 'GUILD_MEMBER_ADD') {
    logger.info(
      `[加入] :成员[${data.msg.user.id}][${data.msg.user.username}]已经加入频道[${data.msg.guild_id}]`
    );
  } else if (data.eventType === 'GUILD_MEMBER_REMOVE') {
    logger.info(
      `[退出] :成员[${data.msg.user.id}][${data.msg.user.username}]已经退出频道[${data.msg.guild_id}]`
    );
  } else {
    logger.info(
      `[成员资料变更] :成员[${data.msg.user.id}][${data.msg.user.username}]`
    );
  }
});

// 消息事件，仅 *私域* 机器人能够设置此 intents。
ws.on('GUILD_MESSAGES', async e => {
  // console.log('[GUILD_MESSAGES] 事件接收 :', e);

  let { data } = await client.channelApi.channel(e.msg.channel_id);
  logger.info(
    `[${e.msg.channel_id}] [${data.name}] [${e.msg.author.username}] [${e.msg.author.id}] :`,
    e.msg.content ? e.msg.content : '',
    e.msg.attachments ? e.msg.attachments : ''
  );
  // console.log(e);
  solve.dealMsg(e);
});

ws.on('GUILD_MESSAGE_REACTIONS', data => {
  console.log('[GUILD_MESSAGE_REACTIONS] 事件接收 :', data);
});
// 私聊消息
ws.on('DIRECT_MESSAGE', data => {
  logger.info(
    `[私聊] [${data.msg.author.username}] [${data.msg.author.id}] :`,
    data.msg.content ? data.msg.content : '',
    data.msg.attachments ? data.msg.attachments : ''
  );
  solve.dealMsg(data);
});
ws.on('INTERACTION', data => {
  console.log('[INTERACTION] 事件接收 :', data);
});
ws.on('MESSAGE_AUDIT', data => {
  console.log('[MESSAGE_AUDIT] 事件接收 :', data);
});
ws.on('FORUMS_EVENT', data => {
  console.log('[FORUMS_EVENT] 事件接收 :', data);
});
ws.on('AUDIO_ACTION', data => {
  console.log('[AUDIO_ACTION] 事件接收 :', data);
});

// // 消息事件，此为公域的消息事件，需要@机器人
// ws.on('PUBLIC_GUILD_MESSAGES', async data => {
//   console.log('[PUBLIC_GUILD_MESSAGES] 事件接收 :', data);
// });

global.ws = ws;
